1 /*
2 
3 Boost Software License - Version 1.0 - August 17th, 2003
4 
5 Permission is hereby granted, free of charge, to any person or organization
6 obtaining a copy of the software and accompanying documentation covered by
7 this license (the "Software") to use, reproduce, display, distribute,
8 execute, and transmit the Software, and to prepare derivative works of the
9 Software, and to permit third-parties to whom the Software is furnished to
10 do so, all subject to the following:
11 
12 The copyright notices in the Software and this entire statement, including
13 the above license grant, this restriction and the following disclaimer,
14 must be included in all copies of the Software, in whole or in part, and
15 all derivative works of the Software, unless such copies or derivative
16 works are solely in the form of machine-executable object code generated by
17 a source language processor.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26 
27 */ 
28 
29 module derelict.purple.plugin;
30 
31 import derelict.glib.gtypes;
32 import derelict.glib.glibconfig;
33 import derelict.glib.glist;
34 import derelict.purple.pluginpref;
35 import derelict.purple.signals;
36 import derelict.purple.value;
37 import core.stdc.config;
38 
39 extern (C):
40 
41 alias _PurplePlugin PurplePlugin;
42 alias _PurplePluginInfo PurplePluginInfo;
43 alias _PurplePluginUiInfo PurplePluginUiInfo;
44 alias _PurplePluginLoaderInfo PurplePluginLoaderInfo;
45 alias _PurplePluginAction PurplePluginAction;
46 alias int PurplePluginPriority;
47 alias _Anonymous_0 PurplePluginType;
48 
49 enum _Anonymous_0
50 {
51 	PURPLE_PLUGIN_UNKNOWN = -1,
52 	PURPLE_PLUGIN_STANDARD = 0,
53 	PURPLE_PLUGIN_LOADER = 1,
54 	PURPLE_PLUGIN_PROTOCOL = 2
55 }
56 
57 struct _PurplePluginInfo
58 {
59 	uint magic;
60 	uint major_version;
61 	uint minor_version;
62 	PurplePluginType type;
63 	char* ui_requirement;
64 	c_ulong flags;
65 	GList* dependencies;
66 	PurplePluginPriority priority;
67 	char* id;
68 	char* name;
69 	char* version_;
70 	char* summary;
71 	char* description;
72 	char* author;
73 	char* homepage;
74 	gboolean function (PurplePlugin*) load;
75 	gboolean function (PurplePlugin*) unload;
76 	void function (PurplePlugin*) destroy;
77 	void* ui_info;
78 	void* extra_info;
79 	PurplePluginUiInfo* prefs_info;
80 	GList* function (PurplePlugin*, gpointer) actions;
81 	void function () _purple_reserved1;
82 	void function () _purple_reserved2;
83 	void function () _purple_reserved3;
84 	void function () _purple_reserved4;
85 }
86 
87 struct _PurplePluginLoaderInfo
88 {
89 	GList* exts;
90 	gboolean function (PurplePlugin*) probe;
91 	gboolean function (PurplePlugin*) load;
92 	gboolean function (PurplePlugin*) unload;
93 	void function (PurplePlugin*) destroy;
94 	void function () _purple_reserved1;
95 	void function () _purple_reserved2;
96 	void function () _purple_reserved3;
97 	void function () _purple_reserved4;
98 }
99 
100 struct _PurplePlugin
101 {
102 	gboolean native_plugin;
103 	gboolean loaded;
104 	void* handle;
105 	char* path;
106 	PurplePluginInfo* info;
107 	char* error;
108 	void* ipc_data;
109 	void* extra;
110 	gboolean unloadable;
111 	GList* dependent_plugins;
112 	void function () _purple_reserved1;
113 	void function () _purple_reserved2;
114 	void function () _purple_reserved3;
115 	void function () _purple_reserved4;
116 }
117 
118 struct _PurplePluginUiInfo
119 {
120 	PurplePluginPrefFrame* function (PurplePlugin*) get_plugin_pref_frame;
121 	int page_num;
122 	PurplePluginPrefFrame* frame;
123 	void function () _purple_reserved1;
124 	void function () _purple_reserved2;
125 	void function () _purple_reserved3;
126 	void function () _purple_reserved4;
127 }
128 
129 struct _PurplePluginAction
130 {
131 	char* label;
132 	void function (PurplePluginAction*) callback;
133 	PurplePlugin* plugin;
134 	gpointer context;
135 	gpointer user_data;
136 }
137 
138 
139 version(Derelict_Link_Static)
140 {
141     extern( C ) nothrow 
142     {
143         PurplePlugin* purple_plugin_new(gboolean native, const(char)* path);
144         PurplePlugin* purple_plugin_probe(const(char)* filename);
145         gboolean purple_plugin_register(PurplePlugin* plugin);
146         gboolean purple_plugin_load(PurplePlugin* plugin);
147         gboolean purple_plugin_unload(PurplePlugin* plugin);
148         void purple_plugin_disable(PurplePlugin* plugin);
149         gboolean purple_plugin_reload(PurplePlugin* plugin);
150         void purple_plugin_destroy(PurplePlugin* plugin);
151         gboolean purple_plugin_is_loaded(const(PurplePlugin)* plugin);
152         gboolean purple_plugin_is_unloadable(const(PurplePlugin)* plugin);
153         const(gchar)* purple_plugin_get_id(const(PurplePlugin)* plugin);
154         const(gchar)* purple_plugin_get_name(const(PurplePlugin)* plugin);
155         const(gchar)* purple_plugin_get_version(const(PurplePlugin)* plugin);
156         const(gchar)* purple_plugin_get_summary(const(PurplePlugin)* plugin);
157         const(gchar)* purple_plugin_get_description(const(PurplePlugin)* plugin);
158         const(gchar)* purple_plugin_get_author(const(PurplePlugin)* plugin);
159         const(gchar)* purple_plugin_get_homepage(const(PurplePlugin)* plugin);
160         gboolean purple_plugin_ipc_register(PurplePlugin* plugin, const(char)* command, PurpleCallback func, PurpleSignalMarshalFunc marshal, PurpleValue* ret_value, int num_params, ...);
161         void purple_plugin_ipc_unregister(PurplePlugin* plugin, const(char)* command);
162         void purple_plugin_ipc_unregister_all(PurplePlugin* plugin);
163         gboolean purple_plugin_ipc_get_params(PurplePlugin* plugin, const(char)* command, PurpleValue** ret_value, int* num_params, PurpleValue*** params);
164         void* purple_plugin_ipc_call(PurplePlugin* plugin, const(char)* command, gboolean* ok, ...);
165         void purple_plugins_add_search_path(const(char)* path);
166         GList* purple_plugins_get_search_paths();
167         void purple_plugins_unload_all();
168         void purple_plugins_unload(PurplePluginType type);
169         void purple_plugins_destroy_all();
170         void purple_plugins_save_loaded(const(char)* key);
171         void purple_plugins_load_saved(const(char)* key);
172         void purple_plugins_probe(const(char)* ext);
173         gboolean purple_plugins_enabled();
174         void purple_plugins_register_probe_notify_cb(void function (void*) func, void* data);
175         void purple_plugins_unregister_probe_notify_cb(void function (void*) func);
176         void purple_plugins_register_load_notify_cb(void function (PurplePlugin*, void*) func, void* data);
177         void purple_plugins_unregister_load_notify_cb(void function (PurplePlugin*, void*) func);
178         void purple_plugins_register_unload_notify_cb(void function (PurplePlugin*, void*) func, void* data);
179         void purple_plugins_unregister_unload_notify_cb(void function (PurplePlugin*, void*) func);
180         PurplePlugin* purple_plugins_find_with_name(const(char)* name);
181         PurplePlugin* purple_plugins_find_with_filename(const(char)* filename);
182         PurplePlugin* purple_plugins_find_with_basename(const(char)* basename);
183         PurplePlugin* purple_plugins_find_with_id(const(char)* id);
184         GList* purple_plugins_get_loaded();
185         GList* purple_plugins_get_protocols();
186         GList* purple_plugins_get_all();
187         void* purple_plugins_get_handle();
188         void purple_plugins_init();
189         void purple_plugins_uninit();
190         PurplePluginAction* purple_plugin_action_new(const(char)* label, void function (PurplePluginAction*) callback);
191         void purple_plugin_action_free(PurplePluginAction* action);
192     }
193 }
194 else
195 {
196     extern( C ) nothrow 
197     {
198         alias da_purple_plugin_new = PurplePlugin* function(gboolean native, const(char)* path);																														
199         alias da_purple_plugin_probe = PurplePlugin* function(const(char)* filename);																																	
200         alias da_purple_plugin_register = gboolean function(PurplePlugin* plugin);																																		
201         alias da_purple_plugin_load = gboolean function(PurplePlugin* plugin);																																			
202         alias da_purple_plugin_unload = gboolean function(PurplePlugin* plugin);																																		
203         alias da_purple_plugin_disable = void function(PurplePlugin* plugin);																																			
204         alias da_purple_plugin_reload = gboolean function(PurplePlugin* plugin);																																		
205         alias da_purple_plugin_destroy = void function(PurplePlugin* plugin);																																			
206         alias da_purple_plugin_is_loaded = gboolean function(const(PurplePlugin)* plugin);																																
207         alias da_purple_plugin_is_unloadable = gboolean function(const(PurplePlugin)* plugin);																															
208         alias da_purple_plugin_get_id = const(gchar)* function(const(PurplePlugin)* plugin);																															
209         alias da_purple_plugin_get_name = const(gchar)* function(const(PurplePlugin)* plugin);																															
210         alias da_purple_plugin_get_version = const(gchar)* function(const(PurplePlugin)* plugin);																														
211         alias da_purple_plugin_get_summary = const(gchar)* function(const(PurplePlugin)* plugin);																														
212         alias da_purple_plugin_get_description = const(gchar)* function(const(PurplePlugin)* plugin);																													
213         alias da_purple_plugin_get_author = const(gchar)* function(const(PurplePlugin)* plugin);																														
214         alias da_purple_plugin_get_homepage = const(gchar)* function(const(PurplePlugin)* plugin);																														
215         alias da_purple_plugin_ipc_register = gboolean function(PurplePlugin* plugin, const(char)* command, PurpleCallback func, PurpleSignalMarshalFunc marshal, PurpleValue* ret_value, int num_params, ...);			
216         alias da_purple_plugin_ipc_unregister = void function(PurplePlugin* plugin, const(char)* command);																												
217         alias da_purple_plugin_ipc_unregister_all = void function(PurplePlugin* plugin);																																
218         alias da_purple_plugin_ipc_get_params = gboolean function(PurplePlugin* plugin, const(char)* command, PurpleValue** ret_value, int* num_params, PurpleValue*** params);											
219         alias da_purple_plugin_ipc_call = void* function(PurplePlugin* plugin, const(char)* command, gboolean* ok, ...);																								
220         alias da_purple_plugins_add_search_path = void function(const(char)* path);																																		
221         alias da_purple_plugins_get_search_paths = GList* function();																																					
222         alias da_purple_plugins_unload_all = void function();																																							
223         alias da_purple_plugins_unload = void function(PurplePluginType type);																																			
224         alias da_purple_plugins_destroy_all = void function();																																							
225         alias da_purple_plugins_save_loaded = void function(const(char)* key);																																			
226         alias da_purple_plugins_load_saved = void function(const(char)* key);																																			
227         alias da_purple_plugins_probe = void function(const(char)* ext);																																				
228         alias da_purple_plugins_enabled = gboolean function();																																							
229         alias da_purple_plugins_register_probe_notify_cb = void function(void function (void*) func, void* data);																										
230         alias da_purple_plugins_unregister_probe_notify_cb = void function(void function (void*) func);																													
231         alias da_purple_plugins_register_load_notify_cb = void function(void function (PurplePlugin*, void*) func, void* data);																							
232         alias da_purple_plugins_unregister_load_notify_cb = void function(void function (PurplePlugin*, void*) func);																									
233         alias da_purple_plugins_register_unload_notify_cb = void function(void function (PurplePlugin*, void*) func, void* data);																						
234         alias da_purple_plugins_unregister_unload_notify_cb = void function(void function (PurplePlugin*, void*) func);																									
235         alias da_purple_plugins_find_with_name = PurplePlugin* function(const(char)* name);																																
236         alias da_purple_plugins_find_with_filename = PurplePlugin* function(const(char)* filename);																														
237         alias da_purple_plugins_find_with_basename = PurplePlugin* function(const(char)* basename);																														
238         alias da_purple_plugins_find_with_id = PurplePlugin* function(const(char)* id);																																	
239         alias da_purple_plugins_get_loaded = GList* function();																																							
240         alias da_purple_plugins_get_protocols = GList* function();																																						
241         alias da_purple_plugins_get_all = GList* function();																																							
242         alias da_purple_plugins_get_handle = void* function();																																							
243         alias da_purple_plugins_init = void function();																																									
244         alias da_purple_plugins_uninit = void function();																																								
245         alias da_purple_plugin_action_new = PurplePluginAction* function(const(char)* label, void function (PurplePluginAction*) callback);																				
246         alias da_purple_plugin_action_free = void function(PurplePluginAction* action);				
247     }
248 
249     __gshared
250     {
251 	    da_purple_plugin_new purple_plugin_new;
252 	    da_purple_plugin_probe purple_plugin_probe;
253 	    da_purple_plugin_register purple_plugin_register;
254 	    da_purple_plugin_load purple_plugin_load;
255 	    da_purple_plugin_unload purple_plugin_unload;
256 	    da_purple_plugin_disable purple_plugin_disable;
257 	    da_purple_plugin_reload purple_plugin_reload;
258 	    da_purple_plugin_destroy purple_plugin_destroy;
259 	    da_purple_plugin_is_loaded purple_plugin_is_loaded;
260 	    da_purple_plugin_is_unloadable purple_plugin_is_unloadable;
261 	    da_purple_plugin_get_id purple_plugin_get_id;
262 	    da_purple_plugin_get_name purple_plugin_get_name;
263 	    da_purple_plugin_get_version purple_plugin_get_version;
264 	    da_purple_plugin_get_summary purple_plugin_get_summary;
265 	    da_purple_plugin_get_description purple_plugin_get_description;
266 	    da_purple_plugin_get_author purple_plugin_get_author;
267 	    da_purple_plugin_get_homepage purple_plugin_get_homepage;
268 	    da_purple_plugin_ipc_register purple_plugin_ipc_register;
269 	    da_purple_plugin_ipc_unregister purple_plugin_ipc_unregister;
270 	    da_purple_plugin_ipc_unregister_all purple_plugin_ipc_unregister_all;
271 	    da_purple_plugin_ipc_get_params purple_plugin_ipc_get_params;
272 	    da_purple_plugin_ipc_call purple_plugin_ipc_call;
273 	    da_purple_plugins_add_search_path purple_plugins_add_search_path;
274 	    da_purple_plugins_get_search_paths purple_plugins_get_search_paths;
275 	    da_purple_plugins_unload_all purple_plugins_unload_all;
276 	    da_purple_plugins_unload purple_plugins_unload;
277 	    da_purple_plugins_destroy_all purple_plugins_destroy_all;
278 	    da_purple_plugins_save_loaded purple_plugins_save_loaded;
279 	    da_purple_plugins_load_saved purple_plugins_load_saved;
280 	    da_purple_plugins_probe purple_plugins_probe;
281 	    da_purple_plugins_enabled purple_plugins_enabled;
282 	    da_purple_plugins_register_probe_notify_cb purple_plugins_register_probe_notify_cb;
283 	    da_purple_plugins_unregister_probe_notify_cb purple_plugins_unregister_probe_notify_cb;
284 	    da_purple_plugins_register_load_notify_cb purple_plugins_register_load_notify_cb;
285 	    da_purple_plugins_unregister_load_notify_cb purple_plugins_unregister_load_notify_cb;
286 	    da_purple_plugins_register_unload_notify_cb purple_plugins_register_unload_notify_cb;
287 	    da_purple_plugins_unregister_unload_notify_cb purple_plugins_unregister_unload_notify_cb;
288 	    da_purple_plugins_find_with_name purple_plugins_find_with_name;
289 	    da_purple_plugins_find_with_filename purple_plugins_find_with_filename;
290 	    da_purple_plugins_find_with_basename purple_plugins_find_with_basename;
291 	    da_purple_plugins_find_with_id purple_plugins_find_with_id;
292 	    da_purple_plugins_get_loaded purple_plugins_get_loaded;
293 	    da_purple_plugins_get_protocols purple_plugins_get_protocols;
294 	    da_purple_plugins_get_all purple_plugins_get_all;
295 	    da_purple_plugins_get_handle purple_plugins_get_handle;
296 	    da_purple_plugins_init purple_plugins_init;
297 	    da_purple_plugins_uninit purple_plugins_uninit;
298 	    da_purple_plugin_action_new purple_plugin_action_new;
299 	    da_purple_plugin_action_free purple_plugin_action_free;
300     }
301 }